Solid Cache
抱えていた課題
Redisキャッシュと比較して書き込み・読み取りがRedisよりも25-50%遅くなったが、1.2ミリ秒が0.8-1.0ミリ秒になる程度なのでリクエストに占める割合はわずか
キャッシュは6倍大きく80%安いストレージで実行されるようになった
ohbarye.icon キャッシュを少ししか使わないシステムでは恩恵はより少ないはず
LRUよりも非効率だがキャッシュの生存期間が長いのでデメリットは軽減される 管理が簡単でもある
アイテムがいつ読み取られたか記録しなくてよい
最大 ID と最小 ID を比較することでキャッシュ サイズの推定、制御ができる
テーブルの一方の端から削除し、もう一方の端に追加することで、(少なくとも MySQL では) 断片化を回避できる コード
インストール時に作成されるmigration
シンプルなkey, valueをバイナリで保存する code:db/migrate/20230724121448_create_solid_cache_entries.rb
class CreateSolidCacheEntries < ActiveRecord::Migration7.0 def change
create_table :solid_cache_entries do |t|
t.binary :key, null: false, limit: 1024
t.binary :value, null: false, limit: 512.megabytes
t.datetime :created_at, null: false
t.index :key, unique: true
end
end
end